#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "logindialog.h"
#include "database.h"
#include "dialognewuser.h"
#include <QDebug>
#include <QSqlError>
#include <QSqlTableModel>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->page->hide();

    bool sqlState =createConnection();//在数据库创建函数中可知道用户名Lily的密码是888
    if(sqlState){
        qDebug()<<"The database is already open !";
    }
    else{
        qDebug()<<"The database open failed !";
    }

    model = new QSqlTableModel(this);
    model->setTable("user");

    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select(); //选取整个表的所有行
    model->removeColumn(2); //不显示name属性列,如果这时添加记录，则该属性的值添加不上
    ui->tableViewUser->setModel(model);
    ui->tableViewUser->setEditTriggers(QAbstractItemView::NoEditTriggers);   //使其不可编辑
    SetUserTableStytle();//设置tableview的样式
    mLoginDialog = new loginDialog(this);
    mLoginDialog->show();
    QObject::connect(mLoginDialog, SIGNAL(passWordIsRight()), this, SLOT(showSetPage()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButtonAddUser_clicked()
{
    DialogNewUser *newUser = new DialogNewUser(this);
    newUser->show();
    QObject::connect(newUser, SIGNAL(AddUserSuccess()), this, SLOT(updateUserTable()));
}

void MainWindow::updateUserTable()
{
    model->setTable("user");   //重新关联表
    model->removeColumn(2);
    model->select();   //这样才能再次显示整个表的内容
    SetUserTableStytle();//设置用户表格式，如居中显示等
//    qDebug()<<model->rowCount();
}

void MainWindow::on_pushButtonDeleteUser_clicked()
{
    int curRow = ui->tableViewUser->currentIndex().row();
    qDebug()<<model->rowCount();
    //获取选中的行
    model->removeRow(curRow);
    //删除该行
    int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定""删除当前行吗？"),
                         QMessageBox::Yes,QMessageBox::No);
    if(ok == QMessageBox::No)
    {
       model->revertAll(); //如果不删除，则撤销
    }
    else model->submitAll(); //否则提交，在数据库中删除该行
}

void MainWindow::SetUserTableStytle()//居中显示还没有实现
{
    model->setHeaderData(0,Qt::Horizontal,tr("编号"));//设置表头显示内容
    model->setHeaderData(1,Qt::Horizontal,tr("姓名"));//设置表头显示内容
    ui->tableViewUser->verticalHeader()->setVisible(false);//禁止显示垂直方向表头
    ui->tableViewUser->setColumnWidth(0,ui->tableViewUser->width()/2);//设置列宽度
    ui->tableViewUser->setColumnWidth(1,ui->tableViewUser->width()/2);//设置列宽度
}

void MainWindow::showSetPage()
{
    ui->page->show();
}
